﻿// ## 2021/10/24 #江东新风#改写171trigger##
// ## 2021/10/13 #江东新风#匹配新209函数参数##
// ## 2020/08/22 #江东新风#武器id?-1的情況修正##
// ## 2020/07/26 ##
/*
	@제작 : masterpiecek
	@참고 : 209 함수 후킹 포함


	[ 전법 사망 확률 ]

	※ 부대를 대상으로 한 전법 공격 시 일정 확률로 피격 부대의 주장이 사망
	 - 기존의 ‘203 기병 전법 사망 확률.cpp’ 파일이 제대로 적용되지 않아 제작한 패치입니다.
	 - '209 부대의 공격 대미지.cpp' 파일이 파일 이름순 기준으로 '전법 사망 확률.cpp' 파일보다 반드시 더 앞쪽에 위치해야 합니다.

	1. 사망확률은 기본확률과 추가확률로 구성
	 1) 기본사망확률 : 각 병기의 전법별로 따로 적용
	  - 각 병기의 기존 전법별로 크리티컬 여부에 따라 사망확률 차등 적용 (전법 공격이 실패한 경우 제외)
	  - '병기.xml' 파일에서 병기별로 사용 가능한 전법을 추가한 경우 해당 추가 전법에는 사망확률이 적용되지 않음
	 2) 추가사망확률 : 모든 병기의 전법 공격에 공통적으로 적용
	  - 시나리오 전사 설정, 피격부대 주장의 성격, 공격부대와 피격부대 간 부대능력 차이에 따라 사망확률 차등 적용
	  - 공격부대의 병종별 특기에 따라 사망 추가확률 부여

	2. 피격부대가 사망회피 관련 특기 보유 시 사망하지 않음
	 1) ‘호위’ 특기 : 전법공격 시 피격부대가 특기 ‘호위’를 보유한 경우 전법의 사망확률을 충족해도 사망하지 않음
	 2) ‘강운’ 특기 : 전법공격 시 피격부대의 주장이 특기 ‘강운’을 보유한 경우 전법의 사망확률을 충족해도 사망하지 않음

	3. 광역피해 전법과 관련하여 광역효과 기능 추가
	 - 광역피해를 주는 전법 공격 시 전법피해를 받은 모든 피격부대에게 사망확률을 각각 적용 가능

	4. 피격부대 주장이 사망 시 대사 출력
*/

namespace 전법_사망_확률
{

	/// ================================== < 유저 설정 > ============================================

	/// [ 병기별 전법 사망확률 적용여부 설정 ]
	//  - 각 병기별로 기본 전법에만 사망확률이 적용됨 ('병기.xml' 파일에서 병기별로 사용 가능한 전법을 추가한 경우 해당 추가 전법은 적용되지 않음)

	const bool 枪兵战法致死 = false;	// 창병 기본 전법 : 돌출, 나선첨, 이단첨
	const bool 戟兵战法致死 = false;	// 극병 기본 전법 : 갈퀴, 횡치, 선풍
	const bool 弩兵战法致死 = false;	// 노병 기본 전법 : 화시, 관시, 난사
	const bool 骑兵战法致死 = true;	// 기병 기본 전법 : 돌격, 돌파, 돌진
	const bool 井栏战法致死 = false;	// 정란 기본 전법 : 공성화시
	const bool 投石战法致死 = false;	// 투석 기본 전법 : 공성투석
	const bool 木兽战法致死 = false;	// 목수 기본 전법 : 공성방사
	const bool 水军战法致死 = false;	// 함선 기본 전법 : 함선화시(주가, 누선, 투함), 함선격돌(누선, 투함), 함선투석(투함)

	//  const int 暴击增加討死率 = 0;

/// ---------------------------------------------------------------------------------------------

/// [ 창병전법 사망확률 관련 설정 ]

	// 기본 사망확률 : 창병전법의 사망확률 (크리티컬 여부에 따라 차등)
	const int 기본사망확률_돌출_일반 = 0;
	const int 기본사망확률_돌출_크리티컬 = 0;
	const int 기본사망확률_나선첨_일반 = 1;
	const int 기본사망확률_나선첨_크리티컬 = 3;
	const int 기본사망확률_이단첨_일반 = 2;
	const int 기본사망확률_이단첨_크리티컬 = 4;

	/// ---------------------------------------------------------------------------------------------

	/// [ 극병전법 사망확률 관련 설정 ]

		// 광역 피해 전법(횡치, 선풍) 사용 시 피해를 입은 모든 부대에게 사망확률을 적용할 것인지 여부
	const bool 극병전법_광역효과_적용 = false;

	// 기본 사망확률 : 극병전법의 사망확률 (크리티컬 여부에 따라 차등)
	const int 기본사망확률_갈퀴_일반 = 0;
	const int 기본사망확률_갈퀴_크리티컬 = 0;
	const int 기본사망확률_횡치_일반 = 1;
	const int 기본사망확률_횡치_크리티컬 = 3;
	const int 기본사망확률_선풍_일반 = 2;
	const int 기본사망확률_선풍_크리티컬 = 4;

	/// ---------------------------------------------------------------------------------------------

	/// [ 노병전법 사망확률 관련 설정 ]

		// 광역 피해 전법(관시, 난사) 사용 시 피해를 입은 모든 부대에게 사망확률을 적용할 것인지 여부
	const bool 노병전법_광역효과_적용 = false;

	// 기본 사망확률 : 노병전법의 사망확률 (크리티컬 여부에 따라 차등)
	const int 기본사망확률_화시_일반 = 0;
	const int 기본사망확률_화시_크리티컬 = 0;
	const int 기본사망확률_관시_일반 = 1;
	const int 기본사망확률_관시_크리티컬 = 3;
	const int 기본사망확률_난사_일반 = 2;
	const int 기본사망확률_난사_크리티컬 = 4;

	/// ---------------------------------------------------------------------------------------------

	/// [ 기병전법 사망확률 관련 설정 ]

		// 기본 사망확률 : 기병전법의 사망확률 (크리티컬 여부에 따라 차등)
	const int 기본사망확률_돌격_일반 = 0;
	const int 기본사망확률_돌격_크리티컬 = 0;
	const int 기본사망확률_돌파_일반 = 1;
	const int 기본사망확률_돌파_크리티컬 = 3;
	const int 기본사망확률_돌진_일반 = 2;
	const int 기본사망확률_돌진_크리티컬 = 4;

	/// ---------------------------------------------------------------------------------------------

	/// [ 정란전법 사망확률 관련 설정 ]

		// 기본 사망확률 : 정란전법의 사망확률 (크리티컬 여부에 따라 차등)
	const int 기본사망확률_공성화시_일반 = 0;
	const int 기본사망확률_공성화시_크리티컬 = 0;

	/// ---------------------------------------------------------------------------------------------

	/// [ 투석전법 사망확률 관련 설정 ]

		// 광역 피해 전법(공성투석) 사용 시 피해를 입은 모든 부대에게 사망확률을 적용할 것인지 여부
	const bool 투석전법_광역효과_적용 = false;

	// 기본 사망확률 : 투석전법의 사망확률 (크리티컬 여부에 따라 차등)
	const int 기본사망확률_공성투석_일반 = 0;
	const int 기본사망확률_공성투석_크리티컬 = 0;

	/// ---------------------------------------------------------------------------------------------

	/// [ 목수전법 사망확률 관련 설정 ]

		// 기본 사망확률 : 목수전법의 사망확률 (크리티컬 여부에 따라 차등)
	const int 기본사망확률_공성방사_일반 = 0;
	const int 기본사망확률_공성방사_크리티컬 = 0;

	/// ---------------------------------------------------------------------------------------------

	/// [ 함선전법 사망확률 관련 설정 ]

		// 광역 피해 전법(함선투석) 사용 시 피해를 입은 모든 부대에게 사망확률을 적용할 것인지 여부
	const bool 함선전법_광역효과_적용 = false;

	// 기본 사망확률 : 함선전법의 사망확률 (크리티컬 여부에 따라 차등)
	const int 기본사망확률_함선화시_일반 = 0;
	const int 기본사망확률_함선화시_크리티컬 = 0;
	const int 기본사망확률_함선격돌_일반 = 0;
	const int 기본사망확률_함선격돌_크리티컬 = 0;
	const int 기본사망확률_함선투석_일반 = 0;
	const int 기본사망확률_함선투석_크리티컬 = 0;

	/// ---------------------------------------------------------------------------------------------

	/// [ 공격부대의 병종별 보유 특기에 따른 사망 추가확률 설정 ]

		// 병종별 특기에 따른 추가확률 기능 적용여부 설정
	const bool 추가사망확률_특기적용 = false;

	// 병종별 특기에 따른 추가확률값 설정
	const array<array<array<int>>> 추가사망확률_특기 =
	{
		/*검병*/ {},
		/*창병*/ {},
		/*극병*/ {},
		/*노병*/ { {特技_射手, 10} },
		/*기병*/ { {特技_猛者, 10} },
		/*충차*/ {},
		/*정란*/ {},
		/*투석*/ {},
		/*목수*/ {},
		/*주가*/ {},
		/*누선*/ {},
		/*투함*/ {}
	};

	/// ---------------------------------------------------------------------------------------------

	/// [ 전법 사망확률과 관련된 모든 병기의 공통 설정 ]

		// 추가 사망확률 : 시나리오의 전사 정도 설정
	const int 战死_标准 = 0;
	const int 战死_高战死 = 2;

	// 추가 사망확률 : 피격부대 주장의 성격
	const int 战死_性格_小心 = -1;
	const int 战死_性格_冷静 = 0;
	const int 战死_性格_刚胆 = 0;
	const int 战死_性格_莽撞 = 1;

	// 추가 사망확률 : 공격부대와 피격부대 간 부대능력치 차이
	const int 추가사망확률_부대능력_피격부대우세 = -3;
	const int 추가사망확률_部队能力_攻击부대우세_6이하 = -1;
	const int 추가사망확률_部队能力_攻击부대우세_12이하 = 0;
	const int 추가사망확률_部队能力_攻击부대우세_12초과 = 1;

	// 사망 시 대사 (무작위 표시)
	const int 사망대사_표시모드 = 1;	// 1 = 메시지 박스, 2 = 부대 말풍선
	const array<string> 사망대사_배열 =
	{
		"可恶..真是太荒唐了..",
		"我的武运到此为止了么.."
	};

	/// =============================================================================================

	class Main
	{

		///	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

				// 병기 번호 : 0(검), 1(창), 2(극), 3(노), 4(군마), 5(충차), 6(정란), 7(투석), 8(목수), 9(주가), 10(누선), 11(투함)
				// 전법 번호 : 0(돌출), 1(나선첨), 2(이단첨), 3(갈퀴), 4(선풍), 5(횡치), 6(화시), 7(관시), 8(난사), 9(돌격), 10(돌파), 11(돌진), 12(공성화시), 13(공성파쇄), 14(공성방사), 15(공성투석), 16(함선화시), 17(함선격돌), 18(함선투석)

		pk::func209_t@ prev_callback_;
		pk::unit@ attacker_;
		pk::unit@ target_unit_;
		array<int> target_unit_id_arr(0);
		pk::person@ attacker_leader_;
		pk::person@ target_leader_;
		int tactics_id_;
		int critical_index;	// 0(일반), 1(크리티컬)
		bool kill_onDrawGame = false;

		array<array<int>> 병기별_전법일람(兵器_末, array<int>(0));
		array<bool> 병기별_전법사망확률_적용여부(兵器_末);
		array<bool> 병기별_전법광역효과_적용여부(兵器_末);
		array<array<int>> 기본사망확률_전법(전법_끝, array<int>(0));
		array<int> 추가사망확률_전사(전사_끝);
		array<int> 추가사망확률_성격(성격_끝);

		///	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

		Main()
		{
			func_설정반영();

			@prev_callback_ = cast<pk::func209_t@>(pk::get_func(209));
			pk::reset_func(209);
			pk::set_func(209, pk::func209_t(func209));

			pk::bind(173, pk::trigger173_t(部队经验获得_战法死亡率));
			pk::bind(171, pk::trigger171_t(部队清除_战法死亡率));
		}

		///	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

		void func209(pk::damage_info& info, pk::unit@ attacker, int tactics_id, const pk::point& in target_pos, int type, int critical, bool ambush, int rettype)
		{
			prev_callback_(info, attacker, tactics_id, target_pos, type, critical, ambush, rettype);

			if (pk::is_campaign()) return;
			if (pk::is_mission_running()) return;

			pk::unit@ target_unit = pk::get_unit(target_pos);
			if (target_unit is null) return;
			if (type != /*공격*/0) return;
			if (!pk::is_valid_tactics_id(tactics_id)) return;
			if (!info.tactics_hit) return;
			if (pk::get_scenario().battle_death == 전사_없음) return;
			if (병기별_전법일람[attacker.weapon].find(tactics_id) < 0) return;
			if (!병기별_전법사망확률_적용여부[attacker.weapon]) return;

			// 전법광역효과를 적용하지 않는 경우 최초 피격부대에게만 효과를 적용하기 위함
			if (!병기별_전법광역효과_적용여부[attacker.weapon] and attacker_ !is null) return;

			@attacker_ = @attacker;
			@attacker_leader_ = pk::get_person(attacker.leader);
			if (target_unit_id_arr.find(target_unit.get_id()) < 0) target_unit_id_arr.insertLast(target_unit.get_id());
			tactics_id_ = tactics_id;
			critical_index = (info.critical) ? /*크리티컬*/1 : /*일반*/0;
		}

		void 部队经验获得_战法死亡率(pk::unit@ unit, int type)
		{
			if (attacker_ is null) return;
			if (target_unit_id_arr.find(unit.get_id()) < 0) return;

			func_部队变量储存(unit);
			int death_chance = func_최종사망확률();
			func_部队变量处理();

			if (!func_사망회피특기_보유여부())
			{
				if (pk::rand_bool(death_chance)) func_사망처리_부대경험치획득트리거();
			}
		}

		void 部队清除_战法死亡率(pk::unit@ unit, pk::hex_object@ dst, int type)
		{
			if (attacker_ is null) return;
			if (target_unit_id_arr.find(unit.get_id()) < 0) return;

			func_部队变量储存(unit);
			int death_chance = func_최종사망확률();
			func_部队变量处理();

			if (!func_사망회피특기_보유여부() and !func_포로처우예외_해당여부())
			{
				if (pk::rand_bool(death_chance)) func_사망처리_부대제거트리거();
			}
		}

		///	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

		void func_部队变量储存(pk::unit@ unit)
		{
			// 사망처리를 위한 피격부대 특정
			@target_unit_ = @unit;
			@target_leader_ = pk::get_person(unit.leader);
		}

		void func_部队变量处理()
		{
			// 전법광역효과를 적용하여 복수의 피격부대가 있는 경우 사망처리한 피격부대의 변수처리
			target_unit_id_arr.removeAt(target_unit_id_arr.find(target_unit_.get_id()));

			if (int(target_unit_id_arr.length) == 0)
			{
				// 부대제거 트리거의 중복실행 방지를 위해 공격 부대 변수를 사망처리에 우선하여 초기화 (피격부대 변수가 모두 처리된 후)
				@attacker_ = null;
			}
		}

		bool func_사망회피특기_보유여부()
		{
			if (target_unit_.has_skill(特技_护卫)) return true;
			if (ch::has_skill(target_leader_, 特技_强运)) return true;

			return false;
		}

		// 적부대 괴멸 후 포로처우 시 등용, 포로, 해방, 처단 커맨드를 실행하는 경우 부대가 제거되는데,
		// 이때 실행되는 부대제거 트리거에서의 사망처리 함수 실행을 방지하지 위한 예외 처리 (처단은 사망 처리되므로 제외)
		bool func_포로처우예외_해당여부()
		{
			// 등용, 포로 예외 처리 登用，释放作为例外处理
			if (target_leader_.service == attacker_leader_.service) return true;

			// 등용, 해방 예외 처리 登用，释放作为例外处理
			if (target_leader_.location < 据点_末) return true;

			return false;
		}

		//	最终死亡率
		int func_최종사망확률()
		{
			int n = 0;
			n += 기본사망확률_전법[tactics_id_][critical_index];
			n += 추가사망확률_전사[pk::get_scenario().battle_death];
			n += 추가사망확률_성격[target_leader_.character];
			n += func_추가사망확률_부대능력();
			n += func_추가사망확률_특기();

			return pk::min(100, pk::max(0, n));
		}

		int func_추가사망확률_부대능력()
		{
			int attacker_leader_stat = pk::max(attacker_leader_.stat[武将能力_统率], attacker_leader_.stat[武将能力_武力]);
			int target_leader_stat = pk::max(target_leader_.stat[武将能力_统率], target_leader_.stat[武将能力_武力]);

			if (attacker_leader_stat <= target_leader_stat)      return 추가사망확률_부대능력_피격부대우세;
			else if (attacker_leader_stat <= target_leader_stat + 6)  return 추가사망확률_部队能力_攻击부대우세_6이하;
			else if (attacker_leader_stat <= target_leader_stat + 12) return 추가사망확률_部队能力_攻击부대우세_12이하;
			else                                                      return 추가사망확률_部队能力_攻击부대우세_12초과;
		}

		int func_추가사망확률_특기()
		{
			int n = 0;
			//ch::u8debug(pk::format("weapon_id: {}", attacker_.weapon));
			if (attacker_.weapon == -1) return n;
			array<array<int>> skill_arr = 추가사망확률_특기[attacker_.weapon];
			//ch::u8debug(pk::format("skill_arr length is {}", skill_arr.length));
			for (int i = 0; i < int(skill_arr.length); i++)
			{
				if (attacker_.has_skill(skill_arr[i][0])) n += skill_arr[i][1];
			}

			return n;
		}

		void func_사망처리_부대경험치획득트리거()
		{
			func_사망대사표시();

			// 部队1名人员死亡处理时，部队将被删除，增加部队毁灭效果 부대 인원이 1명인 경우 사망처리 시 부대가 그냥 삭제되므로 부대괴멸 효과 추가
			if (pk::get_member_count(target_unit_) == 1)
			{
				if (pk::is_in_screen(target_unit_.pos)) pk::create_death_effect(target_unit_, null);
				pk::kill(target_unit_, null);
			}

			pk::kill(target_leader_, attacker_leader_, target_unit_, null, 2);
			pk::play_se(3);
		}

		void func_사망처리_부대제거트리거()
		{
			func_사망대사표시();

			// 부대제거 트리거의 중복실행 및 부대 주장의 중복사망 방지를 위해 '게임화면그리기' 트리거 안에서 사망처리
			kill_onDrawGame = true;
			pk::bind(120, cast<pk::trigger120_t@>(function()
			{
				if (!main.kill_onDrawGame) return;
				main.kill_onDrawGame = false;

				pk::kill(main.target_leader_, main.attacker_leader_, main.target_unit_, null, 2);
				pk::play_se(3);
			}));
		}

		void func_사망대사표시()
		{
			if (pk::is_in_screen(target_unit_.pos))
			{
				string death_msg = 사망대사_배열[pk::rand(int(사망대사_배열.length))];
				if (사망대사_표시모드 == /*메시지 박스*/1) pk::message_box(pk::encode(death_msg), target_leader_);
				else if (사망대사_표시모드 == /*부대 말풍선*/2) pk::say(pk::encode(death_msg), target_leader_, target_unit_);

				pk::wait(1);
			}
		}

		///	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

		void func_설정반영()
		{
			병기별_전법일람[兵器_剑] = {};
			병기별_전법일람[兵器_枪] = { 전법_돌출, 전법_나선첨, 전법_이단첨 };
			병기별_전법일람[兵器_戟] = { 전법_갈퀴, 전법_횡치, 전법_선풍 };
			병기별_전법일람[兵器_弩] = { 전법_화시, 전법_관시, 전법_난사 };
			병기별_전법일람[兵器_战马] = { 전법_돌격, 전법_돌파, 전법_돌진 };
			병기별_전법일람[兵器_冲车] = { 전법_공성파쇄 };
			병기별_전법일람[兵器_井阑] = { 战法_攻城火矢 };
			병기별_전법일람[兵器_投石] = { 战法_攻城投石 };
			병기별_전법일람[兵器_木兽] = { 전법_공성방사 };
			병기별_전법일람[兵器_走舸] = { 전법_함선화시 };
			병기별_전법일람[兵器_楼船] = { 전법_함선화시, 전법_함선격돌 };
			병기별_전법일람[兵器_斗舰] = { 전법_함선화시, 전법_함선격돌, 전법_함선투석 };

			병기별_전법사망확률_적용여부[兵器_剑] = false;
			병기별_전법사망확률_적용여부[兵器_枪] = 枪兵战法致死;
			병기별_전법사망확률_적용여부[兵器_戟] = 戟兵战法致死;
			병기별_전법사망확률_적용여부[兵器_弩] = 弩兵战法致死;
			병기별_전법사망확률_적용여부[兵器_战马] = 骑兵战法致死;
			병기별_전법사망확률_적용여부[兵器_冲车] = false;
			병기별_전법사망확률_적용여부[兵器_井阑] = 井栏战法致死;
			병기별_전법사망확률_적용여부[兵器_投石] = 投石战法致死;
			병기별_전법사망확률_적용여부[兵器_木兽] = 木兽战法致死;
			병기별_전법사망확률_적용여부[兵器_走舸] = 水军战法致死;
			병기별_전법사망확률_적용여부[兵器_楼船] = 水军战法致死;
			병기별_전법사망확률_적용여부[兵器_斗舰] = 水军战法致死;

			병기별_전법광역효과_적용여부[兵器_剑] = false;
			병기별_전법광역효과_적용여부[兵器_枪] = false;
			병기별_전법광역효과_적용여부[兵器_戟] = 극병전법_광역효과_적용;
			병기별_전법광역효과_적용여부[兵器_弩] = 노병전법_광역효과_적용;
			병기별_전법광역효과_적용여부[兵器_战马] = false;
			병기별_전법광역효과_적용여부[兵器_冲车] = false;
			병기별_전법광역효과_적용여부[兵器_井阑] = false;
			병기별_전법광역효과_적용여부[兵器_投石] = 투석전법_광역효과_적용;
			병기별_전법광역효과_적용여부[兵器_木兽] = false;
			병기별_전법광역효과_적용여부[兵器_走舸] = false;
			병기별_전법광역효과_적용여부[兵器_楼船] = false;
			병기별_전법광역효과_적용여부[兵器_斗舰] = 함선전법_광역효과_적용;

			기본사망확률_전법[전법_돌출] = { 기본사망확률_돌출_일반, 기본사망확률_돌출_크리티컬 };
			기본사망확률_전법[전법_나선첨] = { 기본사망확률_나선첨_일반, 기본사망확률_나선첨_크리티컬 };
			기본사망확률_전법[전법_이단첨] = { 기본사망확률_이단첨_일반, 기본사망확률_이단첨_크리티컬 };
			기본사망확률_전법[전법_갈퀴] = { 기본사망확률_갈퀴_일반, 기본사망확률_갈퀴_크리티컬 };
			기본사망확률_전법[전법_횡치] = { 기본사망확률_횡치_일반, 기본사망확률_횡치_크리티컬 };
			기본사망확률_전법[전법_선풍] = { 기본사망확률_선풍_일반, 기본사망확률_선풍_크리티컬 };
			기본사망확률_전법[전법_화시] = { 기본사망확률_화시_일반, 기본사망확률_화시_크리티컬 };
			기본사망확률_전법[전법_관시] = { 기본사망확률_관시_일반, 기본사망확률_관시_크리티컬 };
			기본사망확률_전법[전법_난사] = { 기본사망확률_난사_일반, 기본사망확률_난사_크리티컬 };
			기본사망확률_전법[전법_돌격] = { 기본사망확률_돌격_일반, 기본사망확률_돌격_크리티컬 };
			기본사망확률_전법[전법_돌파] = { 기본사망확률_돌파_일반, 기본사망확률_돌파_크리티컬 };
			기본사망확률_전법[전법_돌진] = { 기본사망확률_돌진_일반, 기본사망확률_돌진_크리티컬 };
			기본사망확률_전법[战法_攻城火矢] = { 기본사망확률_공성화시_일반, 기본사망확률_공성화시_크리티컬 };
			기본사망확률_전법[전법_공성파쇄] = { 0, 0 };
			기본사망확률_전법[전법_공성방사] = { 기본사망확률_공성방사_일반, 기본사망확률_공성방사_크리티컬 };
			기본사망확률_전법[战法_攻城投石] = { 기본사망확률_공성투석_일반, 기본사망확률_공성투석_크리티컬 };
			기본사망확률_전법[전법_함선화시] = { 기본사망확률_함선화시_일반, 기본사망확률_함선화시_크리티컬 };
			기본사망확률_전법[전법_함선격돌] = { 기본사망확률_함선격돌_일반, 기본사망확률_함선격돌_크리티컬 };
			기본사망확률_전법[전법_함선투석] = { 기본사망확률_함선투석_일반, 기본사망확률_함선투석_크리티컬 };

			추가사망확률_전사[전사_없음] = 0;
			추가사망확률_전사[전사_표준] = 战死_标准;
			추가사망확률_전사[전사_많음] = 战死_高战死;

			추가사망확률_성격[성격_소심] = 战死_性格_小心;
			추가사망확률_성격[성격_냉정] = 战死_性格_冷静;
			추가사망확률_성격[성격_대담] = 战死_性格_刚胆;
			추가사망확률_성격[성격_저돌] = 战死_性格_莽撞;
		}

		///	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

	}

	Main main;
}
